package com.yf.ea;

/**
 * 逃逸分析
 * 在JDK6u23版本之后，HotSpot默认开启逃逸分析。
 * 如果使用较早版本，开发人员可设置以下JVM参数开启
 * -XX:+DoEscapeAnalysis 显式开启逃逸分析
 * -XX:+PrintEscapeAnalysis 查看逃逸分析和筛选结果。
 *
 * 如何快速判断是否发生了逃逸，就看方法内对象的作用域范围，只要对象在方法外有可能被调用就会发生逃逸
 */
public class EscapeAnalysis {
    public EscapeAnalysis obj;

    /*
    方法返回EscapeAnalysis对象，发生逃逸
     */
    public EscapeAnalysis newInstance() {
        return obj == null ? new EscapeAnalysis() : obj;
    }

    /*
    为成员变量赋值，发生逃逸
     */
    public void setObj() {
        this.obj = new EscapeAnalysis();
    }

    /*
    对象的作用域仅在当前方法中，未发生逃逸
     */
    public void useEscapeAnalysis() {
        EscapeAnalysis escapeAnalysis = new EscapeAnalysis();

    }

    /*
    引用成员变量的值，发生逃逸
     */
    public void getEscapeAnalysis() {
        EscapeAnalysis e = newInstance();
    }

}
